package com.tarena.lbs.content.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tarena.lbs.content.pojo.po.ActionSearchPO;
import com.tarena.lbs.content.pojo.query.ArticleQuery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface ActionMapper extends BaseMapper<ActionSearchPO> {

    // 动态 SQL 实现多条件查询（修复XML转义问题）
    @Select({
            "<script>",
            "SELECT * FROM lbs_action WHERE 1=1",
            // 行为类型（必传）
            "AND behavior = #{behavior}",
            // 用户ID（查询指定用户的行为）
            "<if test='query.userId != null'>",
            "AND behavior_user_id = #{query.userId}",
            "</if>",
            // 文章ID（可选）
            "<if test='query.articleId != null'>",
            "AND article_id = #{query.articleId}",
            "</if>",
            // 文章标题（模糊查询）
            "<if test='query.articleTitle != null and query.articleTitle != \"\"'>",
            "AND article_title LIKE CONCAT('%', #{query.articleTitle}, '%')",
            "</if>",
            // 时间范围：创建时间 >= 开始时间（修复转义）
            "<if test='query.updateStartTime != null'>",
            "AND create_time &gt;= #{query.updateStartTime}",
            "</if>",
            // 时间范围：创建时间 <= 结束时间（修复转义）
            "<if test='query.updateEndTime != null'>",
            "AND create_time &lt;= #{query.updateEndTime}",
            "</if>",
            // 排序：按创建时间倒序（最新的在前）
            "ORDER BY create_time DESC",
            "</script>"
    })
    List<ActionSearchPO> selectByQuery(@Param("query") ArticleQuery query, @Param("behavior") Integer behavior);

    // 对应的计数查询（保持与selectByQuery条件一致，修复转义）
    @Select({
            "<script>",
            "SELECT COUNT(*) FROM lbs_action WHERE 1=1",
            "AND behavior = #{behavior}",
            "<if test='query.userId != null'>",
            "AND behavior_user_id = #{query.userId}",
            "</if>",
            "<if test='query.articleId != null'>",
            "AND article_id = #{query.articleId}",
            "</if>",
            "<if test='query.articleTitle != null and query.articleTitle != \"\"'>",
            "AND article_title LIKE CONCAT('%', #{query.articleTitle}, '%')",
            "</if>",
            // 修复转义
            "<if test='query.updateStartTime != null'>",
            "AND create_time &gt;= #{query.updateStartTime}",
            "</if>",
            // 修复转义
            "<if test='query.updateEndTime != null'>",
            "AND create_time &lt;= #{query.updateEndTime}",
            "</if>",
            "</script>"
    })
    long countByQuery(@Param("query") ArticleQuery query, @Param("behavior") Integer behavior);
}